home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 21 / CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso / CUCD / Magazine / C_Tutorial / Part-6 / asl2 / gadgets.c < prev    next >
C/C++ Source or Header  |  1997-10-27  |  3KB  |  133 lines

  1. #include "gadgets.h"
  2. #include "screen.h"
  3. #include "toolwin.h"
  4. #include "visual.h"
  5.  
  6. #include<graphics/text.h>
  7.  
  8. #include<stdio.h>
  9.  
  10. #include<clib/gadtools_protos.h>
  11. #include<clib/graphics_protos.h>
  12.  
  13. /* Some constants for the position and size of our gadgets */
  14. #define MYBUT_LEFT        (10)
  15. #define MYBUT_TOP            (5)
  16. #define MYBUT_WIDTH        (80)
  17. #define MYBUT_HEIGHT    (12)
  18. #define MYBUT_TEXT        "Next Pen"
  19.  
  20. #define MYPAL_LEFT        (170)
  21. #define MYPAL_TOP            (1)
  22. #define MYPAL_WIDTH        (109)
  23. #define MYPAL_HEIGHT    (19)
  24. #define MYPAL_TEXT        "Colour:"
  25.  
  26. /* The initial pen colour */
  27. #define MYINITPEN            (1)
  28.  
  29. /* Global record of the complete gadget list */
  30. static struct Gadget* glist = NULL;
  31. /* Global record of the palette gadget */
  32. static struct Gadget* palgad = NULL;
  33. /* Initialised structure declaration: describes 8pt Topaz font */
  34. static struct TextAttr topazFont = { "topaz.font", 8, 0, 0, };
  35. /* Global record of current pen */
  36. static UBYTE pen = MYINITPEN;
  37.  
  38. int gadgetHeight()
  39. {
  40.     /* Palette gadget dictates vertical space needed */
  41.     return MYPAL_HEIGHT+(2*MYPAL_TOP);
  42. }
  43.  
  44. /* Set foreground pen of window */
  45. void setFgPen(struct Window* win, UBYTE value)
  46. {
  47.     /* Wrap when reached the end of the palette gadget's colours */
  48.     pen = value % (1<<win->WScreen->BitMap.Depth);
  49.     SetAPen(win->RPort, pen);
  50.     if(palgad)
  51.         GT_SetGadgetAttrs(palgad, getToolWin(), NULL, GTPA_Color, pen, TAG_DONE);
  52. }
  53.  
  54. void nextFgPen(struct Window* win)
  55. {
  56.     setFgPen(win, pen+1);
  57. }
  58.  
  59. void prevFgPen(struct Window* win)
  60. {
  61.     setFgPen(win, pen-1);
  62. }
  63.  
  64. void resetFgPen(struct Window* win)
  65. {
  66.     setFgPen(win, MYINITPEN);
  67. }
  68.  
  69. int createGadgets()
  70. {
  71.     struct Gadget* gad;
  72.     struct Screen* scr = getScreen();
  73.     APTR vinfo = getVisual();
  74.     /* The offsets of our window borders */
  75.     int offleft = scr->WBorLeft;
  76.     int offtop = scr->WBorTop + (scr->Font->ta_YSize + 1);
  77.     struct NewGadget newgad;
  78.     /* Start a GadTools gadget list */
  79.     gad = CreateContext(&glist);
  80.  
  81.     /* Setup our first gadget */
  82.     newgad.ng_TextAttr         = &topazFont;
  83.     newgad.ng_VisualInfo     = vinfo;
  84.     newgad.ng_LeftEdge         = MYBUT_LEFT + offleft;
  85.     newgad.ng_TopEdge         = MYBUT_TOP + offtop;
  86.     newgad.ng_Width             = MYBUT_WIDTH;
  87.     newgad.ng_Height             = MYBUT_HEIGHT;
  88.     newgad.ng_GadgetText    = MYBUT_TEXT;
  89.     newgad.ng_GadgetID        = MYBUT_ID;
  90.     newgad.ng_Flags                = 0;
  91.     /* Now create it and add it to our list */
  92.     gad = CreateGadget(BUTTON_KIND, gad, &newgad, TAG_END);
  93.  
  94.     /* Setup our second gadget */
  95.     /* (We can reuse newgad, and just change the different bits) */
  96.     newgad.ng_LeftEdge         = MYPAL_LEFT + offleft;
  97.     newgad.ng_TopEdge         = MYPAL_TOP + offtop;
  98.     newgad.ng_Width             = MYPAL_WIDTH;
  99.     newgad.ng_Height             = MYPAL_HEIGHT;
  100.     newgad.ng_GadgetText    = MYPAL_TEXT;
  101.     newgad.ng_GadgetID        = MYPAL_ID;
  102.     newgad.ng_Flags                = 0;
  103.     /* Now create it and add it to our list */
  104.     gad = CreateGadget(    PALETTE_KIND, gad, &newgad,
  105.                                             /* Initially selected pen */
  106.                                             GTPA_Color, pen,
  107.                                             /* Depth: 2 to the power depth colours */
  108.                                             GTPA_Depth, scr->BitMap.Depth,
  109.                                             /* Gadget will indicate selection */
  110.                                             GTPA_IndicatorWidth, 16,
  111.                                             TAG_DONE);
  112.  
  113.     /* Remember gadget pointer */
  114.     palgad = gad;
  115.     /* Success if we managed final allocation */
  116.     return (gad != NULL);
  117. }
  118.  
  119. void freeGadgets()
  120. {
  121.     if(glist)
  122.     {
  123.         FreeGadgets(glist);
  124.         glist = NULL;
  125.         /* palgad is invalid now, too, so it must be set to NULL */
  126.         palgad = NULL;
  127.     }
  128. }
  129.  
  130. struct Gadget* getGadgets()
  131. {
  132.     return glist;
  133. }